iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0

進程(Process)和線程(Thread)

進程(Process)
一個進程代表著一個正在運行的程式實例。每個進程都擁有自己獨立的內存空間,其中包含了程式的程式碼、數據以及運行時的狀態信息。不同進程之間是相互隔離的,每個進程運行在自己專屬的內存空間中,彼此之間不共享內存資源。
假如我使用Line在電腦上,就是啟動一個進程,系統會分配內存空間給進程。當我同時又開了Discord,又是另一個進程,系統會分配另一個內存空間。
進程之間的獨立性保證了系統的穩定性,一個進程的崩潰不會影響其他進程。
線程(Thread)
在一個進程內,線程是可執行的最小單位,它負責實際執行工作。不同於進程,線程之間共享進程的資源,包括內存和文件描述符。線程具有自己的程序計數器、堆棧和狀態信息,並且能夠被操作系統進行運算調度。這種共享資源的結構使得線程之間的通信和資源共享更加方便,因為它們運行在同一個進程的上下文中,可以直接訪問共享的內存空間。

MultiProcessing 多進程 和 MultiThreading 多線程

MultiProcessing 多進程
可以想像成一個大型圖書館(類似CPU),圖書館的空間有限,只能供一個閱覽區(類似進程),即同一時間只能讓一群讀者進入閱覽區閱讀書籍。這時,每次只能允許單一群讀者進入閱覽區閱讀,如果另一群讀者想進入,則當前的讀者群體必須離開。

  • 開6個進程
import java.io.IOException;

public class MultipleProcessesExample {
    public static void main(String[] args) {
        for (int i = 0; i < 6; i++) {
            ProcessBuilder processBuilder = new ProcessBuilder("java", "YourJavaClass");
            try {
                Process process = processBuilder.start();
                System.out.println("Process " + (i + 1) + " started.");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

MultiThreading 多線程
而擁有多核心的CPU,就像是一個大型圖書館擁有多個閱覽區,它可以同時讓多群讀者(類似多個進程)在不同的閱覽區內閱讀。每個閱覽區內有很多閱讀座位,這就類似於線程,一個閱覽區可以容納多個讀者(線程),也就是一個進程可以有多個線程在其中運行

  • 開6個線程
public class MultipleThreadsExample {
    public static void main(String[] args) {
        for (int i = 0; i < 6; i++) {
            Thread thread = new MyThread("Thread " + (i + 1));
            thread.start();
        }
    }
}

class MyThread extends Thread {
    public MyThread(String name) {
        super(name);
    }

    public void run() {
        System.out.println("Thread " + getName() + " is running.");
    }
}


上一篇
Day 28 Java Project : Income Statement
下一篇
Day 30 : 完賽感想
系列文
菜鳥工程師30天學java基礎30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言